package response

import (
	"encoding/json"
	"helper-api/utils"
	"time"
)

// PermissionListResponse 资源查询
type PermissionListResponse struct {
	Id         int64     `json:"id"`         // 主键
	Name       string    `json:"name"`       // 资源名称
	Code       string    `json:"code"`       // 资源编码
	ParentId   int64     `json:"parentId"`   // 上级资源ID
	Icon       string    `json:"icon"`       // 资源图标
	Path       string    `json:"path"`       // 资源路径
	ResType    int       `json:"permType"`   // 资源类型 1:目录 2:菜单 3:按钮
	UserId     int64     `json:"createId"`   // 创建用户ID
	Username   string    `json:"createName"` // 创建用户ID
	Level      int       `json:"level"`      // 层级
	OrderNo    int       `json:"order"`      // 权重
	CreateTime time.Time `json:"createTime"` // 创建时间
}

func (s PermissionListResponse) MarshalJSON() ([]byte, error) {
	type temp PermissionListResponse
	return json.Marshal(&struct {
		temp
		CreateTime utils.DateTime `json:"createTime"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
	})
}

// PermissionTreeProp 资源Tree
type PermissionTreeProp struct {
	Key      int64                `json:"key"`               // 资源ID
	Title    string               `json:"title"`             // 资源标题
	Types    int                  `json:"treeType"`          // 资源类型
	Level    int                  `json:"level"`             // 层级
	Num      int                  `json:"-"`                 // 是否是子节点
	ParentId int64                `json:"parentId"`          // 上级机构ID
	Children []PermissionTreeProp `json:"children" gorm:"-"` // 上级机构
	IsLeaf   bool                 `json:"isLeaf"`            // 是否叶子节点
}

// PermissionInfoResponse 资源详情
type PermissionInfoResponse struct {
	Id         int64     `json:"id"`         // 主键
	Name       string    `json:"name"`       // 资源名称
	Code       string    `json:"code"`       // 资源编码
	ParentId   int64     `json:"parentId"`   // 上级资源ID
	ParentName string    `json:"parentName"` // 上级名称
	Icon       string    `json:"icon"`       // 资源图标
	Path       string    `json:"path"`       // 资源路径
	ResType    int       `json:"permType"`   // 资源类型   1:目录 2:菜单 3:按钮
	UserId     int64     `json:"createId"`   // 创建用户ID
	Username   string    `json:"createName"` // 创建用户ID
	Level      int       `json:"level"`      // 层级
	OrderNo    int       `json:"order"`      // 权重
	CreateTime time.Time `json:"createTime"` // 创建时间
	UpdateId   int64     `json:"updateId"`   // 修改人ID
	UpdateName string    `json:"updateName"` // 修改人名字
	UpdateTime time.Time `json:"updateTime"` // 更新时间
	Brief      string    `json:"brief"`      // 备注
}

func (s PermissionInfoResponse) MarshalJSON() ([]byte, error) {
	type temp PermissionInfoResponse
	return json.Marshal(&struct {
		temp
		CreateTime utils.DateTime `json:"createTime"`
		UpdateTime utils.DateTime `json:"updateTime"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
		UpdateTime: utils.DateTime(s.UpdateTime),
	})
}
